Software development is typically performed as group projects. A subject software system is developed through design efforts, test efforts, implementation efforts and maintenance efforts. There may be different groups and different group members participating in each of these efforts. Throughout these efforts and among the work group members, various modeling and other development tools are used for increased communication and consistency in developing the subject software system. A software configuration management system is one such tool. Software configuration management systems allow teams of users (software developer/engineer) to work with artifacts of a subject software system.
A software artifact is a persistent representation of an aspect of a software system. Common examples of software artifacts are files and directories containing the source code of a software system, but other examples of artifacts include requirements, end-user documentation, system models, and system tests. A significant state of a software artifact is saved as a version of that artifact, and the sets of versions of a given artifact define the history of that artifact.
A software configuration is a set of software artifact versions, where only one version of a given artifact is selected by a given software configuration. A software change-set identifies a logical change to a configuration, and consists of a set of one or more changes to one or more artifacts. An alternative characterization of a software configuration is that is consists of the set of change-sets that have resulted in that configuration.
A workspace is an object that allows a user to create and modify configurations. A powerful yet simple way to construct a configuration in a workspace is to “accept” a set of configurations and change-sets into the workspace, and then construct a configuration by effectively unioning the change-sets identified by those configurations and change-sets (an algorithm for doing such configuration construction is defined in U.S. patent application Ser. No. 11/312,995 by assignee of the present invention).
A central problem is software development is how to control the flow of changes into and out of a workspace, so that the configuration of a developer's workspace is stable while the developer is making changes, but sees changes being made by other team members when those changes are ready to be seen and when the developer is ready to see them.